blob: a78a55cc1524eeb75690488f65293ee44c13ae4a [file] [log] [blame]
Aaron Colwellc6841a02014-03-07 01:37:561<!DOCTYPE html>
2<html>
3 <head>
Aaron Colwell06f8ec22014-03-07 18:09:474 <script src="/resources/testharness.js"></script>
5 <script src="/resources/testharnessreport.js"></script>
Aaron Colwellc6841a02014-03-07 01:37:566 <script src="mediasource-util.js"></script>
Aaron Colwell06f8ec22014-03-07 18:09:477 <link rel="stylesheet" href="/resources/testharness.css">
Aaron Colwellc6841a02014-03-07 01:37:568 </head>
9 <body>
10 <div id="log"></div>
11 <script>
12 var subType = MediaSourceUtil.getSubType(MediaSourceUtil.AUDIO_ONLY_TYPE);
13
14 var manifestFilenameA = subType + "/test-a-128k-44100Hz-1ch-manifest.json";
15 var manifestFilenameB = subType + "/test-v-128k-320x240-30fps-10kfr-manifest.json";
16
17 var expectationsA = {
18 webm: "{ [0.000, 2.023) }",
19 mp4: "{ [0.000, 2.043) }",
20 };
21
22 var expectationsB = {
23 webm: "{ [0.000, 2.001) }",
24 mp4: "{ [0.000, 2.000) }",
25 };
26
27 function mediaSourceDemuxedTest(callback, description)
28 {
29 mediasource_test(function(test, mediaElement, mediaSource)
30 {
31 mediaElement.pause();
32 test.failOnEvent(mediaElement, 'error');
33 test.endOnEvent(mediaElement, 'ended');
34
35 MediaSourceUtil.fetchManifestAndData(test, manifestFilenameA, function(typeA, dataA)
36 {
37 MediaSourceUtil.fetchManifestAndData(test, manifestFilenameB, function(typeB, dataB)
38 {
39 mediaSource.addSourceBuffer(typeA);
40 mediaSource.addSourceBuffer(typeB);
41 assert_equals(mediaSource.activeSourceBuffers.length, 2);
42
43 callback(test, mediaElement, mediaSource, dataA, dataB);
44 });
45 });
46 }, description);
47 };
48
49 function appendData(test, mediaSource, dataA, dataB, callback)
50 {
51 var sourceBufferA = mediaSource.activeSourceBuffers[0];
52 var sourceBufferB = mediaSource.activeSourceBuffers[1];
53
54 test.expectEvent(sourceBufferA, "update");
55 test.expectEvent(sourceBufferA, "updateend");
56 sourceBufferA.appendBuffer(dataA);
57
58 test.expectEvent(sourceBufferB, "update");
59 test.expectEvent(sourceBufferB, "updateend");
60 sourceBufferB.appendBuffer(dataB);
61
62 test.waitForExpectedEvents(function()
63 {
64 callback();
65 });
66 }
67
68 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dataA, dataB) {
69 appendData(test, mediaSource, dataA, dataB, function()
70 {
71 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectationsA[subType], "mediaSource.activeSourceBuffers[0]");
72 assertBufferedEquals(mediaSource.activeSourceBuffers[1], expectationsB[subType], "mediaSource.activeSourceBuffers[1]");
73 assertBufferedEquals(mediaElement, expectationsB[subType], "mediaElement.buffered");
74
75 mediaSource.endOfStream();
76
77 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectationsA[subType], "mediaSource.activeSourceBuffers[0]");
78 assertBufferedEquals(mediaSource.activeSourceBuffers[1], expectationsB[subType], "mediaSource.activeSourceBuffers[1]");
79 assertBufferedEquals(mediaElement, expectationsA[subType], "mediaElement.buffered");
80
81 test.done();
82 });
83 }, "Demuxed content with different lengths");
84
85 mediasource_test(function(test, mediaElement, mediaSource)
86 {
87 mediaElement.pause();
88 test.failOnEvent(mediaElement, 'error');
89 test.endOnEvent(mediaElement, 'ended');
90
91 MediaSourceUtil.fetchManifestAndData(test, subType + "/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json", function(type, data)
92 {
93 var sourceBuffer = mediaSource.addSourceBuffer(type);
94 test.expectEvent(sourceBuffer, "update");
95 test.expectEvent(sourceBuffer, "updateend");
96 sourceBuffer.appendBuffer(data);
97
98 test.waitForExpectedEvents(function()
99 {
100 var expectationsAV = {
101 webm: ["{ [0.000, 2.004) }", "{ [0.000, 2.023) }"],
102 mp4: ["{ [0.000, 2.000) }", "{ [0.000, 2.043) }"],
103 };
104
105 var expectedBeforeEndOfStream = expectationsAV[subType][0];
106 var expectedAfterEndOfStream = expectationsAV[subType][1];
107
108 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectedBeforeEndOfStream, "mediaSource.activeSourceBuffers[0]");
109 assertBufferedEquals(mediaElement, expectedBeforeEndOfStream, "mediaElement.buffered");
110
111 mediaSource.endOfStream();
112
113 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectedAfterEndOfStream, "mediaSource.activeSourceBuffers[0]");
114 assertBufferedEquals(mediaElement, expectedAfterEndOfStream, "mediaElement.buffered");
115
116 test.done();
117 });
118 });
119 }, "Muxed tracks with different lengths");
120
121
122 mediaSourceDemuxedTest(function(test, mediaElement, mediaSource, dataA, dataB) {
123 appendData(test, mediaSource, dataA, dataB.subarray(0, 318), function()
124 {
125 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectationsA[subType], "mediaSource.activeSourceBuffers[0]");
126 assertBufferedEquals(mediaSource.activeSourceBuffers[1], "{ }", "mediaSource.activeSourceBuffers[1]");
127 assertBufferedEquals(mediaElement, "{ }", "mediaElement.buffered");
128
129 mediaSource.endOfStream();
130
131 assertBufferedEquals(mediaSource.activeSourceBuffers[0], expectationsA[subType], "mediaSource.activeSourceBuffers[0]");
132 assertBufferedEquals(mediaSource.activeSourceBuffers[1], "{ }", "mediaSource.activeSourceBuffers[1]");
133 assertBufferedEquals(mediaElement, "{ }", "mediaElement.buffered");
134
135 test.done();
136 });
137 }, "Demuxed content with an empty buffered range on one SourceBuffer");
138
139 mediasource_test(function(test, mediaElement, mediaSource)
140 {
141 mediaElement.pause();
142 test.failOnEvent(mediaElement, 'error');
143 test.endOnEvent(mediaElement, 'ended');
144
145 MediaSourceUtil.fetchManifestAndData(test, subType + "/test-av-384k-44100Hz-1ch-320x240-30fps-10kfr-manifest.json", function(type, data)
146 {
147 var sourceBuffer = mediaSource.addSourceBuffer(type);
148 test.expectEvent(sourceBuffer, "update");
149 test.expectEvent(sourceBuffer, "updateend");
150 sourceBuffer.appendBuffer(data.subarray(0, 4052));
151
152 test.waitForExpectedEvents(function()
153 {
154 assertBufferedEquals(mediaSource.activeSourceBuffers[0], "{ }", "mediaSource.activeSourceBuffers[0]");
155 assertBufferedEquals(mediaElement, "{ }", "mediaElement.buffered");
156
157 mediaSource.endOfStream();
158
159 assertBufferedEquals(mediaSource.activeSourceBuffers[0], "{ }", "mediaSource.activeSourceBuffers[0]");
160 assertBufferedEquals(mediaElement, "{ }", "mediaElement.buffered");
161
162 test.done();
163 });
164 });
165 }, "Muxed content empty buffered ranges.");
166 </script>
167 </body>
168</html>